package threshold;

/**
 * @Author wujiaming
 * @Description TODO
 * @Date 2023-03-03 16:41
 * @Version 1.0
 * 给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。
 */
public class AddBinary {

     public String addBinary1(String a, String b) {
         int A = Integer.parseInt(a, 2);
         int B = Integer.parseInt(b, 2);
         int sum = A+B;
         String s = Integer.toBinaryString(sum);
         return s;
     }

    /**
     * ①模仿十进制数有地位向高位运算满二进一
     * ②每个运算位看成是两个单个数字的相加，结果保存到carry变量中，进位取整，结果位取余
     * ③将每个结果位保存在一个新字符串中
     * ④最后反转字符串
     * 有个小小的注意点就是当遍历数组，从头开始往后遍历的同时，由当前下标i索引到倒数第i个下标可用 nums.length-1-i的方法
     * @param a
     * @param b
     * @return
     */
     public String addBinary(String a, String b) {
         StringBuffer ans = new StringBuffer();
         int len = Math.max(a.length(), b.length()), carry = 0;
         for (int i = 0; i < len; i++) {
            carry += i < a.length() ? (a.charAt(a.length() - 1 - i) -'0') : 0;
            carry += i<b.length()?(b.charAt(b.length()-1-i) -'0'):0;
            ans.append((char)(carry % 2 +'0'));
            carry /=2;
         }
         if(carry==1){
             ans.append('1');
         }

         return ans.reverse().toString();
     }

    public static void main(String[] args) {
        AddBinary addBinary = new AddBinary();
        String a = "1010",b = "1011";
        System.out.println(addBinary.addBinary(a,b));
    }
}
